In recent decades, electronic technology, and in particular mobile devices, has revolutionized our everyday lives. Devices such as cell phones, PDAs, mobile media players and digital cameras have permeated the lives of almost every person living in the developed world—and a significant number of people living in undeveloped countries. Mobile communication and computing devices, especially, have become the means by which countless millions conduct their personal and professional interactions with the world. It has become almost impossible for many people, especially those in the business world, who use these devices as a means to improve productivity, to function without access to their electronic devices.
Due to this proliferation, there is a constantly increasing demand for applications for such devices, and in particular for applications that already exist for more conventional computing platforms, such as desktop computers, laptop computers, servers and others.
However, such devices are different in a number of aspects from the more conventional computing platforms, which makes porting of existing programs into embedded programs a non-trivial task.
The aspects include memory management, user interface and additional aspects, since resources such as memory, screen real estate and other resources of mobile devices are naturally limited in mobile devices relatively to those of conventional devices.
Specifically for memory management, dynamic memory allocation which is common in programming is impractical in embedded software for at least two reasons. First, allocation and deallocation are non-deterministic in time, because allocation may require searching for a large enough memory block. In addition deallocation may sometime be implicit, in which case it may be done by a garbage collector which may also be non-deterministic in time.
Second, dynamic memory allocation is highly associated with fragmentation, which may pose a serious problem, especially when memory resources are limited, and the devices may go along time between reboots.